package wec_wallet.ebo.com.util;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Environment;
import android.text.Html;
import android.view.WindowManager;
import android.widget.TextView;


import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 项目名：工具类
 * 创建人：王莹
 * 创建时间：2016/11/14
 * 修改日期：
 * 备注：
 * 1.判断集合是否为空 isListEmpty
 * 2.判断字符串是否为空 stringEmpty
 * 3.获取系统当前时间 getTime
 * 4.根据时间字符串获取毫秒数 getTimeMillis
 * 5.传入开始时间和结束时间字符串来计算消耗时长 getTimeExpend
 * 6.MD5加密 MD5
 * 7.获取屏幕的宽 getScreeWidth
 * 8.在一定范围内生成随机数. 比如此处要求在[0 - 5]内生成随机数. numRandom
 * <p/>
 * 1.获取系统版本号 getVersionName
 * 2.2.2版本才有将应用缓存转移到sd卡的功能  isMethodsCompat
 * 3.判断sd卡是否存在，是返回sd卡路径，否返回内存路径 getSDPath
 * 5.判断当前网络连接是否正常 isConnect
 * 6.调出拨打手机号页面 call
 * 7.用本地浏览器打开一个网站 openBrowser
 * 8.选择浏览器打开网址  openOtherBrowser
 * <p/>
 * 11.清除保存的缓存  getProperties
 * 13.从文件路径中获取文件名和后缀名 getFileNameAndType
 * 14.从路径中获取文件名 getFileName
 * 15.返回文件后缀名 getFileBackName
 * 16.打开word文件 getWordFileIntent
 * 17.android获取一个用于打开Excel文件的intent getExcelFileIntent
 * 19.textView显示多张网络图片 *
 */
public class StringUtil {
    /**
     * 判断集合是否为空
     *
     * @param l
     * @return
     */
    public static boolean isListEmpty(List<?> l) {
        return (l == null || l.isEmpty());
    }

    public static boolean isEqual(String s1, String s2) {
        return s1.equals(s2);
    }

    /**
     * 判断字符串是否为空
     *
     * @param str
     * @return
     */
    public static boolean isStringEmpty(String str) {
        return str == null || str.trim().equals("null") || str.trim().length() == 0;
    }

    /**
     * 获取系统当前时间
     *
     * @return
     */

    public static String getTime() {
        String date = "";
        SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd    hh:mm:ss");
        date = sDateFormat.format(new Date());
        return date;
    }

    /**
     * 验证手机号
     *
     * @param mobiles
     * @return
     */
    public static boolean isMobileNO(String mobiles) {
        Pattern p = Pattern
                .compile("^((13[0-9])|(15[0-9])|(18[0-9])|(17[0-9]))\\d{8}|((147[0-9]\\d{7}))$");
        Matcher m = p.matcher(mobiles);
        return m.matches();
    }

    /**
     * 验证固定电话（如：022-89898765、89898765，但02289898765不可以）
     *
     * @param mobiles
     * @return
     */
    public static boolean isPhoneNO(String mobiles) {
        Pattern p = Pattern
                .compile("^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$");
        Matcher m = p.matcher(mobiles);
        return m.matches();
    }


    /**
     * MD5加密
     *
     * @param str
     * @return
     */
    public static String MD5(String str) {
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
        char[] charArray = str.toCharArray();
        byte[] byteArray = new byte[charArray.length];
        for (int i = 0; i < charArray.length; i++) {
            byteArray[i] = (byte) charArray[i];
        }
        byte[] md5Bytes = md5.digest(byteArray);
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < md5Bytes.length; i++) {
            int val = ((int) md5Bytes[i]) & 0xff;
            if (val < 16) {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        // Log.e("md5",hexValue.toString().toUpperCase());
        return hexValue.toString().toUpperCase();
    }

    /**
     * 判断当前网络连接是否正常
     *
     * @param context 当前全局变量
     * @return 返回boolean 网络正常 返回 true 网络异常 返回false
     */
    public static boolean isConnect(Context context) {
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) {
                NetworkInfo info = connectivity.getActiveNetworkInfo();
                if (info != null && info.isConnected()) {
                    if (info.getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 调出拨打手机号页面 call
     *
     * @param context
     * @param phone   手机号
     */
    public static void call(Context context, String phone) {
        Intent intent = new Intent();
        // 系统默认的action，用来打开默认的电话界面
        intent.setAction(Intent.ACTION_DIAL);
        //如果号码为空，则无反应
        if (isStringEmpty(phone)) {
            return;
        }
        // 手机号码有误
        if (!isMobileNO(phone)
                && !isPhoneNO(phone)) {
//            Toast.makeText(context, R.string.contact_tel_error, Toast.LENGTH_SHORT).show();
            return;

        }
        intent.setData(Uri.parse("tel:" + phone));
        context.startActivity(intent);
    }

    /**
     * 用本地浏览器打开一个网站 openBrowser
     *
     * @param context
     * @param url     网址
     */
    public static void openBrowser(Context context, String url) {
        //urlText是一个文本输入框，输入网站地址
        //Uri  是统一资源标识符
        Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        context.startActivity(intent);
    }

    /**
     * 选择浏览器打开网址  openOtherBrowser
     *
     * @param context
     * @param urls
     */

    public static void openOtherBrowser(Context context, String urls) {
        //从其他浏览器打开
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        Uri content_url = Uri.parse(urls);
        intent.setData(content_url);
        context.startActivity(Intent.createChooser(intent, "请选择浏览器"));
    }


    /**
     * 获取系统版本号 getVersionName
     */
    public static String getVersion(Context context) {
        // 获取packagemanager的实例
        PackageManager packageManager = context.getPackageManager();
        // getPackageName()是你当前类的包名，0代表是获取版本信息
        String version = "";
        try {
            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            version = packInfo.versionCode + "";
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return version;
    }

    /**
     * 2.2版本才有将应用缓存转移到sd卡的功能  isMethodsCompat
     *
     * @param VersionCode
     * @return
     */
    public static boolean isMethodsCompat(int VersionCode) {
        int currentVersion = android.os.Build.VERSION.SDK_INT;
        return currentVersion >= VersionCode;
    }


    /**
     * 在一定范围内生成随机数.
     * 比如此处要求在[0 - 5]内生成随机数. numRandom
     */
    public static int numRandom() {
        int number = new Random().nextInt(6);
        return number;
    }

    /**
     * 从文件路径中获取文件名和后缀名 getFileNameAndType
     *
     * @param path 文件路径
     * @return
     */
    public static String getFileNameAndType(String path) {
        String fileName = "";
        File tempFile = new File(path.trim());
        fileName = tempFile.getName();
        return fileName;
    }

    /**
     * 从路径中获取文件名 getFileName
     *
     * @param path 文件路径
     * @return
     */
    public static String getFileName(String path) {

        int start = path.lastIndexOf("/");
        int end = path.lastIndexOf(".");
        if (start != -1 && end != -1) {
            return path.substring(start + 1, end);
        } else {
            return null;
        }
    }

    /**
     * 返回文件后缀名 getFileBackName
     *
     * @param fileName 文件名
     * @return 格式类型 1：图片 2：word，3：excel
     */
    public static void getFileBackName(String fileName, String path, Context context) {
//        String type = "";
        File f = new File(fileName);
        String name = f.getName();
        if (name.endsWith(".jpg") || name.endsWith(".png")) {
//            type = "1";
        }
        if (name.endsWith(".doc") || name.endsWith(".docx")) {
            getWordFileIntent(path, context);
        }
        if (name.endsWith(".xls") || name.endsWith(".xlsx")) {
            getExcelFileIntent(path, context);
        }
    }

    /**
     * 打开word文件 getWordFileIntent
     *
     * @param param 文档路径
     * @return
     */
    public static Intent getWordFileIntent(String param, Context context) {
        Intent intent = null;
        try {
            intent = new Intent("android.intent.action.VIEW");
            intent.addCategory("android.intent.category.DEFAULT");
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            Uri uri = Uri.fromFile(new File(param));
            intent.setDataAndType(uri, "application/msword");
            context.startActivity(intent);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return intent;
    }

    /**
     * android获取一个用于打开Excel文件的intent getExcelFileIntent
     *
     * @param param 路径
     * @return
     */
    public static Intent getExcelFileIntent(String param, Context context) {
        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Uri uri = Uri.fromFile(new File(param));
        intent.setDataAndType(uri, "application/vnd.ms-excel");
        context.startActivity(intent);
        return intent;
    }

    /**
     * 判断sd卡是否存在，是返回sd卡路径，否返回内存路径 getSDPath
     *
     * @param context
     * @return
     */
    public static String getSDPath(Context context) {
        File sdDir = null;
        boolean sdCardExist = Environment.getExternalStorageState().equals(Environment
                .MEDIA_MOUNTED);   //判断sd卡是否存在

        if (sdCardExist) {
            sdDir = Environment.getExternalStorageDirectory();//获取sd根目录
        } else {
            sdDir = context.getFilesDir();//获得私有根目录
        }
        return sdDir.toString();

    }

    /**
     * textView显示多张网络图片
     */
    public static Html.ImageGetter imageGetter = new Html.ImageGetter() {
        @Override
        public Drawable getDrawable(String source) {
            // TODO Auto-generated method stub
            URL url;
            Drawable drawable = null;
            try {
                url = new URL(source);
                drawable = Drawable.createFromStream(
                        url.openStream(), null);
                drawable.setBounds(0, 0,
                        drawable.getIntrinsicWidth(),
                        drawable.getIntrinsicHeight());
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return drawable;
        }
    };


    /**
     * 根据时间字符串获取毫秒数 getTimeMillis
     *
     * @param strTime 时间字符串
     * @return
     */
    public static long getTimeMillis(String strTime) {
        long returnMillis = 0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        Date d = null;
        try {
            d = sdf.parse(strTime);
            returnMillis = d.getTime();
        } catch (ParseException e) {
//            Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_SHORT).show();
        }
        return returnMillis;
    }

    /**
     * 传入开始时间和结束时间字符串来计算消耗时长 getTimeExpend
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    public static String getTimeExpend(String startTime, String endTime) {
        //传入字串类型 2016/06/28 08:30
        long longStart = getTimeMillis(startTime); //获取开始时间毫秒数
        long longEnd = getTimeMillis(endTime);  //获取结束时间毫秒数
        long longExpend = longEnd - longStart;  //获取时间差

        long longHours = longExpend / (60 * 60 * 1000); //根据时间差来计算小时数
        long longMinutes = (longExpend - longHours * (60 * 60 * 1000)) / (60 * 1000);
        //根据时间差来计算分钟数

        return longHours + "时" + longMinutes + "分";
    }

    /**
     * 获取屏幕的宽 getScreeWidth
     *
     * @param activity
     * @return
     */
    public static int getScreeWidth(Activity activity) {
        int width;
        WindowManager windowManager = activity.getWindowManager();
        width = windowManager.getDefaultDisplay().getWidth();
        return width;
    }

    public static void tvDrableLeft(Context context, TextView tv, int drable) {
        Drawable drawable = context.getResources().getDrawable(drable);
        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
        tv.setCompoundDrawables(drawable, null, null, null);// 设置到控件中
    }
    /**
     * 给TextView右边设置图片
     * @param resId
     */
    public static  void setTextImageRight(Context context, TextView tv,int resId) {
        Drawable drawable = context.getResources().getDrawable(resId);
        drawable.setBounds(0, 0, drawable.getMinimumWidth(),drawable.getMinimumHeight());// 必须设置图片大小，否则不显示
        tv.setCompoundDrawables(null, null, drawable, null);
    }
    /**
     * 设置添加屏幕的背景透明度
     *
     * @param bgAlpha
     */
    public static void setBackgroundAlpha(float bgAlpha,Context mContext) {
        WindowManager.LayoutParams lp = ((Activity) mContext).getWindow()
                .getAttributes();
        lp.alpha = bgAlpha;
        ((Activity) mContext).getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        ((Activity) mContext).getWindow().setAttributes(lp);
    }
}
